﻿using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using Monitor.Repository.DataRepository.LinqModel;
using Monitor.Repository.Development;

namespace Monitor.Models.JsonModel
{

    #region CarDetails - модель возвращаемых данных
    /// <summary>
    /// Подробнее о машине
    /// </summary>
    public class CarDetails
    {
        /// <summary>
        /// Индификатор
        /// </summary>
        public Int64 Id { set; get; }
        /// <summary>
        /// Имя машины
        /// </summary>
        [Display(Name = "Машина")]
        public string CarName { get; set; }
        /// <summary>
        /// Серийный номер
        /// </summary>
        [Display(Name = "Серийный номер")]
        public string SerialCarNumber { get; set; }
        /// <summary>
        /// Координаты
        /// </summary>
        [Display(Name = "Координаты")]
        public Coord CarCoord { get; set; }
        /// <summary>
        /// Время регистрации измерений
        /// </summary>
        [Display(Name = "Время регистрации")]
        public DateTime DateReg { get; set; }
        /// <summary>
        /// Уровень топлива
        /// </summary>
        [Display(Name = "Уровень топлива")]
        public double? FuelLevel { get; set; }
        /// <summary>
        /// Колличество ошибок
        /// </summary>
        [Display(Name = "Ошибки")]
        public int ErrorCount { get; set; }
        /// <summary>
        /// Список контролируемых измерений
        /// </summary>
        [Display(Name = "Состояние")]
        public Dictionary<Int64, CarMesure> ListMesure { get; set; }
        /// <summary>
        /// Список кол-ва соообщений
        /// </summary>
        [Display(Name = "Сообщения")]
        public List<Int64> ListMessage { get; set; }
        /// <summary>
        /// Список наработки
        /// </summary>
        [Display(Name = "Наработка")]
        public List<CompareMesuring> ListCompareMesure { get; set; }

    }

    #endregion

    #region Coord - координаты

    /// <summary>
    /// Класс координат
    /// </summary>
    public class Coord
    {
        public Coord(){}
        /// <summary>
        /// Статический метод парсинга
        /// </summary>
        /// <param name="gps">Объект по старому протоколу</param>
        /// <returns>Координаты</returns>
        public static Coord Parce(RowGPS gps)
        {
            if (gps != null)
            {
                CoordGPS coord = gps.GetCoord();
                if (coord.latitude.HasValue && coord.longitude.HasValue)
                {
                    return new Coord()
                               {
                                   Date = gps.RegDate,
                                   X = coord.latitude.Value,
                                   Y = coord.longitude.Value
                               };
                }
            }
            return null;
        }

        /// <summary>
        /// Значение широты
        /// </summary>
        public double X { get; set; }

        /// <summary>
        /// Значение долготы
        /// </summary>
        public double Y { get; set; }

        /// <summary>
        /// Время измерения
        /// </summary>
        public DateTime Date { get; set; }
    }

    #endregion

    #region CompareMesuring - измерение из двух составляющих
    /// <summary>
    /// Объект Наработка
    /// </summary>
    public class CompareMesuring
    {
        /// <summary>
        /// Значение в работе
        /// </summary>
        [Display(Name = "Работа")]
        public double InProsess { get; set; }

        /// <summary>
        /// Значение в простое
        /// </summary>
        [Display(Name = "Простой")]
        public double OutProsess { get; set; }
    }

    #endregion

    #region CarMesure - измерение машины

    /// <summary>
    /// объект Измерение машины
    /// </summary>
    public class CarMesure
    {
        /// <summary>
        /// Индификатор измерения
        /// </summary>
        [Display(Name = "Индификатор")]
        public Int64 IdMesure { get; set; }

        /// <summary>
        /// Название измерения
        /// </summary>
        [Display(Name = "Измерение")]
        public string NameMesure { get; set; }

        /// <summary>
        /// Значение
        /// </summary>
        [Display(Name = "Значение")]
        public object Value { get; set; }
    }

    #endregion
    
}